001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Nov 27, 2002
005 * Time: 10:19:18 PM
006 */
007
008 package EVolve.util.painters;
009
010 import EVolve.visualization.*;
011 import EVolve.Scene;
012 import EVolve.data.Entity;
013
014 import java.awt.*;
015 import java.util.HashMap;
016
017 public class PredictionPainter extends Painter{
018 protected Color colorRed = new Color(255, 0, 0);
019 protected Color colorBlue = new Color(120, 160, 255);
020 protected Predictor[] predictor; // predictors
021 protected int[] miss;
022 protected HashMap targetCheckMap;
023 protected int targetType;
024 private boolean furtherCheckNeeded = true;
025
026 public PredictionPainter() {
027 targetCheckMap = new HashMap();
028 }
029
030 public PredictionPainter(Predictor[] predictor, int targetType) {
031 this.predictor = predictor;
032 targetCheckMap = new HashMap();
033 this.targetType = targetType;
034 miss = new int[predictor.length];
035 for (int i = 0; i < predictor.length; i++) {
036 miss[i] = 0;
037 }
038 }
039
040 public String getName() {
041 return "Prediction Painter";
042 }
043
044 public void paint(AutoImage image, long x, long y, long z) {
045 predictor[(int)y].newTarget(z);
046
047 if (validateTarget(y,z)) {
048 if (predictor[(int)y].isCorrect()) {
049 if (image.getColor((int)x,(int)y) == null) {
050 image.setColor((int)x,(int)y, colorBlue);
051 }
052 } else {
053 image.setColor((int)x, (int)y, colorRed);
054 miss[(int)y]++;
055 }
056 } else {
057 if (image.getColor((int)x, (int)y) == null) {
058 image.setColor((int)x, (int)y, colorBlue);
059 }
060 }
061 }
062
063 public int[] getMiss() {
064 return miss;
065 }
066
067 public void setPredictor(Predictor[] predictor, int targetType) {
068 this.predictor = predictor;
069 this.targetType = targetType;
070 miss = new int[predictor.length];
071 for (int i = 0; i < predictor.length; i++) {
072 miss[i] = 0;
073 }
074 }
075
076 protected boolean validateTarget(long y, long z) {
077 String newTarget = null;
078 if (furtherCheckNeeded) {
079 newTarget = ((Entity)Scene.getDataManager().getEntity()[targetType].get(new Long(z))).getName();
080 if ((newTarget.indexOf('(') == -1) || // not a method
081 (newTarget.indexOf('#') != -1) /*a location*/) {
082 furtherCheckNeeded = false;
083 return true;
084 }
085 String oldTarget = (String)targetCheckMap.get(new Long(y));
086 int index1 = newTarget.indexOf('(');
087 index1 = newTarget.substring(0,index1).lastIndexOf('.');
088 newTarget = newTarget.substring(index1+1);
089 targetCheckMap.put(new Long(y),newTarget);
090 if ((oldTarget!=null)&&(!oldTarget.equals(newTarget)))
091 return false;
092 }
093 return true;
094 }
095
096 public Object clone() {
097 PredictionPainter o = (PredictionPainter)super.clone();
098 o.colorRed = new Color(255,0,0);
099 o.colorBlue = new Color(120,160,255);
100 o.predictor = (predictor == null) ? null : new Predictor[predictor.length];
101 o.miss = null;
102 if (miss != null) {
103 o.miss = new int[miss.length];
104 for (int i=0; i<miss.length; i++)
105 o.miss[i] = miss[i];
106 }
107 return o;
108 }
109 }